package com.yt.user.service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.yt.common.utils.Md5Utils;
import com.yt.user.models.dto.UserInfoDTO;
import com.yt.user.models.vo.UserInfoVO;
import com.yt.user.models.vo.UserLoginVO;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.BeanUtils;
import javax.annotation.Resource;
import com.yt.user.common.config.YmlConfig;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.yt.user.mapper.UserLoginMapper;
import com.yt.user.models.service.IUserLoginService;
import com.yt.user.models.bo.UserLoginSaveBO;
import com.yt.user.models.dto.UserLoginDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;

/**
 * 用户登录控制器
 *
 * @author lvzeming
 * @Date 2025-08-20 12:13:53
 */
@DubboService
public class UserLoginServiceImpl extends ServiceImpl<UserLoginMapper, UserLoginDTO> implements IUserLoginService{

    @Resource
    private YmlConfig ymlConfig;

    @Autowired
    @Lazy
    private UserInfoServiceImpl iUserInfoService;

    @Override
    public boolean add(UserLoginSaveBO saveBO) {
        UserLoginDTO dto = new UserLoginDTO();
        BeanUtils.copyProperties(saveBO,dto);
        Long id = ymlConfig.getPkId();
        dto.setId(id);
        return this.insert(dto);
    }

    @Override
    public UserLoginVO getLogin(UserLoginSaveBO saveBO) {
        Wrapper wrapper = new EntityWrapper();
        wrapper.eq("mobile",saveBO.getLoginName());
        UserLoginDTO userLoginDTO = this.selectOne(wrapper);
        if(null != userLoginDTO){
            UserLoginVO userLoginVO = new UserLoginVO();
            BeanUtils.copyProperties(userLoginDTO,userLoginVO);
            return userLoginVO;
        }
        return null;
    }

    @Override
    public UserInfoVO getUserLogin(UserLoginSaveBO saveBO) {
        UserLoginVO userLoginVO = getLogin(saveBO);
        if(null == userLoginVO){
            return null;
        }

        UserInfoVO userInfoVO =  new UserInfoVO();
        //获取用户信息
        UserInfoDTO userInfoDTO = iUserInfoService.selectById(userLoginVO.getUserId());
        if(userLoginVO.getPassword().equals(Md5Utils.MD5Encode(saveBO.getPassword(),userLoginVO.getSalt()))){
            BeanUtils.copyProperties(userInfoDTO,userInfoVO);
            return userInfoVO;
        }
        return null;
    }
}
